import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Protocol.KDF import PBKDF2
import base64


def encryptAES(data):
    # 如果参数为空或者为空对象就不生成签名
    if not data or data == {}:
        return ''

    data = {k: v for k, v in data.items() if v}
    # 获取参数的所有键，并按照ASCII码排序
    keys = sorted(data.keys())
    sorted_params_list = []

    for key in keys:
        value = data[key]
        if isinstance(value, dict) or isinstance(value, list):
            sorted_params_list.append(f"{key}={json.dumps(value)}")
        else:
            sorted_params_list.append(f"{key}={value}")

    sorted_params_string = '&'.join(sorted_params_list)

    # 使用AES加密处理后的参数字符串
    return AES_encrypt(sorted_params_string)


def AES_encrypt(data):
    # 密钥与偏移量若与服务端有交互，则需确保它们与服务端使用的是相同的。
    # 密钥
    secret_key = b'8985b2c4fb1900cf'
    # secret_key = b'etLJu2BMW+6zQ5oz2qHhXA=='
    # 偏移量
    # iv = b'bc3f07fbe54c4b90'
    iv = b'bc3f07fbe54c4b90'

    # 确保数据是字符串类型
    encrypted_params = data if isinstance(data, str) else json.dumps(data)
    # 将数据编码为UTF-8字节
    encrypted_params_bytes = encrypted_params.encode('utf-8')

    # 创建AES加密器
    cipher = AES.new(secret_key, AES.MODE_CBC, iv)
    # 对数据进行填充并加密
    encrypted_bytes = cipher.encrypt(pad(encrypted_params_bytes, AES.block_size))

    # 将加密结果转换为Base64编码的字符串
    return base64.b64encode(encrypted_bytes).decode('utf-8')[:64]



if __name__ == '__main__':
    print(encryptAES({"bizSpecialType": 8}))